using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._LocationReferencingTools._Configuration._LRS
{
    /// <summary>
    /// <para>Modify LRS</para>
    /// <para>Modifies an existing linear referencing system (LRS) in the specified workspace.</para>
    /// <para>修改指定工作空间中的现有线性参照系 （LRS）。</para>
    /// </summary>    
    [DisplayName("Modify LRS")]
    public class ModifyLRS : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ModifyLRS()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_workspace">
        /// <para>Input Workspace</para>
        /// <para>The LRS workspace.</para>
        /// <para>LRS 工作空间。</para>
        /// </param>
        /// <param name="_current_lrs_name">
        /// <para>Current LRS Name</para>
        /// <para>The name of the current LRS.</para>
        /// <para>当前 LRS 的名称。</para>
        /// </param>
        public ModifyLRS(object _in_workspace, object _current_lrs_name)
        {
            this._in_workspace = _in_workspace;
            this._current_lrs_name = _current_lrs_name;
        }
        public override string ToolboxName => "Location Referencing Tools";

        public override string ToolName => "Modify LRS";

        public override string CallName => "locref.ModifyLRS";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_workspace, _current_lrs_name, _new_lrs_name, _centerline_feature_class, _centerline_centerline_id_field, _centerline_sequence_table, _centerline_sequence_centerline_id_field, _centerline_sequence_route_id_field, _centerline_sequence_from_date_field, _centerline_sequence_to_date_field, _centerline_sequence_network_id_field, _calibration_point_feature_class, _calibration_point_measure_field, _calibration_point_from_date_field, _calibration_point_to_date_field, _calibration_point_route_id_field, _calibration_point_network_id_field, _redline_feature_class, _redline_from_measure_field, _redline_to_measure_field, _redline_route_id_field, _redline_route_name_field, _redline_effective_date_field, _redline_activity_type_field, _redline_network_id_field, _out_workspace, _conflict_prevention.GetGPValue()];

        /// <summary>
        /// <para>Input Workspace</para>
        /// <para>The LRS workspace.</para>
        /// <para>LRS 工作空间。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Workspace")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_workspace { get; set; }


        /// <summary>
        /// <para>Current LRS Name</para>
        /// <para>The name of the current LRS.</para>
        /// <para>当前 LRS 的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Current LRS Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _current_lrs_name { get; set; }


        /// <summary>
        /// <para>New LRS Name</para>
        /// <para>The new name of the current LRS.</para>
        /// <para>当前 LRS 的新名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("New LRS Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _new_lrs_name { get; set; } = null;


        /// <summary>
        /// <para>Centerline - Feature Class</para>
        /// <para>An existing centerline feature class for the minimum schema.</para>
        /// <para>最小方案的现有中心线要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline - Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _centerline_feature_class { get; set; } = null;


        /// <summary>
        /// <para>Centerline - Centerline ID Field</para>
        /// <para>The name of the centerline ID field from the existing centerline feature class that was chosen.</para>
        /// <para>所选现有中心线要素类中的中心线 ID 字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline - Centerline ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _centerline_centerline_id_field { get; set; } = null;


        /// <summary>
        /// <para>Centerline Sequence - Table</para>
        /// <para>An existing centerline sequence table for the minimum schema.</para>
        /// <para>最小架构的现有中心线序列表。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline Sequence - Table")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _centerline_sequence_table { get; set; } = null;


        /// <summary>
        /// <para>Centerline Sequence - Centerline ID Field</para>
        /// <para>The name of the centerline ID field from the existing centerline sequence table that was chosen.</para>
        /// <para>所选现有中心线序列表中中心线 ID 字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline Sequence - Centerline ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _centerline_sequence_centerline_id_field { get; set; } = null;


        /// <summary>
        /// <para>Centerline Sequence - Route ID Field</para>
        /// <para>The name of the route ID field from the existing centerline sequence table that was chosen.</para>
        /// <para>所选现有中心线序列表中路径 ID 字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline Sequence - Route ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _centerline_sequence_route_id_field { get; set; } = null;


        /// <summary>
        /// <para>Centerline Sequence - From Date Field</para>
        /// <para>The name of the from date field from the existing centerline sequence table that was chosen.</para>
        /// <para>所选现有中心线序列表中的“起始日期”字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline Sequence - From Date Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _centerline_sequence_from_date_field { get; set; } = null;


        /// <summary>
        /// <para>Centerline Sequence - To Date Field</para>
        /// <para>The name of the to date field from the existing centerline sequence table that was chosen.</para>
        /// <para>所选现有中心线序列表中的“截至日期”字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline Sequence - To Date Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _centerline_sequence_to_date_field { get; set; } = null;


        /// <summary>
        /// <para>Centerline Sequence - Network ID Field</para>
        /// <para>The name of the network ID field from the existing centerline sequence table that was chosen.</para>
        /// <para>所选现有中心线序列表中的网络 ID 字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline Sequence - Network ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _centerline_sequence_network_id_field { get; set; } = null;


        /// <summary>
        /// <para>Calibration Point - Feature Class</para>
        /// <para>An existing calibration point feature class for the minimum schema.</para>
        /// <para>最小方案的现有校准点要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Point - Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _calibration_point_feature_class { get; set; } = null;


        /// <summary>
        /// <para>Calibration Point - Measure Field</para>
        /// <para>The name of the measure field from the existing calibration point feature class that was chosen.</para>
        /// <para>所选现有校准点要素类中的测量字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Point - Measure Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _calibration_point_measure_field { get; set; } = null;


        /// <summary>
        /// <para>Calibration Point - From Date Field</para>
        /// <para>The name of the from date field from the existing calibration point feature class that was chosen.</para>
        /// <para>所选现有校准点要素类的起始日期字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Point - From Date Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _calibration_point_from_date_field { get; set; } = null;


        /// <summary>
        /// <para>Calibration Point - To Date Field</para>
        /// <para>The name of the to date field from the existing calibration point feature class that was chosen.</para>
        /// <para>所选现有校准点要素类中的截至日期字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Point - To Date Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _calibration_point_to_date_field { get; set; } = null;


        /// <summary>
        /// <para>Calibration Point - Route ID Field</para>
        /// <para>The name of the route ID field from the existing calibration point feature class that was chosen.</para>
        /// <para>所选现有校准点要素类中的路径 ID 字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Point - Route ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _calibration_point_route_id_field { get; set; } = null;


        /// <summary>
        /// <para>Calibration Point - Network ID Field</para>
        /// <para>The name of the network ID field from the existing calibration point feature class that was chosen.</para>
        /// <para>所选现有校准点要素类中的网络 ID 字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Point - Network ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _calibration_point_network_id_field { get; set; } = null;


        /// <summary>
        /// <para>Redline - Feature Class</para>
        /// <para>An existing redline feature class for the minimum schema.</para>
        /// <para>最小方案的现有红线要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _redline_feature_class { get; set; } = null;


        /// <summary>
        /// <para>Redline - From Measure Field</para>
        /// <para>The name of the from measure field from the existing redline feature class that was chosen.</para>
        /// <para>所选现有红线要素类的 from 度量字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - From Measure Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _redline_from_measure_field { get; set; } = null;


        /// <summary>
        /// <para>Redline - To  Measure Field</para>
        /// <para>The name of the to measure field from the existing redline feature class that was chosen.</para>
        /// <para>所选现有红线要素类中的待测量字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - To  Measure Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _redline_to_measure_field { get; set; } = null;


        /// <summary>
        /// <para>Redline - Route ID Field</para>
        /// <para>The name of the route ID field from the existing redline feature class that was chosen.</para>
        /// <para>所选现有红线要素类中的路径 ID 字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - Route ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _redline_route_id_field { get; set; } = null;


        /// <summary>
        /// <para>Redline - Route Name Field</para>
        /// <para>The name of the route name field from the existing redline feature class that was chosen.</para>
        /// <para>所选现有红线要素类中的路径名称字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - Route Name Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _redline_route_name_field { get; set; } = null;


        /// <summary>
        /// <para>Redline - Effective Date Field</para>
        /// <para>The name of the effective date field from the existing redline feature class that was chosen.</para>
        /// <para>所选现有红线要素类中的生效日期字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - Effective Date Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _redline_effective_date_field { get; set; } = null;


        /// <summary>
        /// <para>Redline - Activity Type Field</para>
        /// <para>The name of the activity type field from the existing redline feature class that was chosen.</para>
        /// <para>所选现有红线要素类中的活动类型字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - Activity Type Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _redline_activity_type_field { get; set; } = null;


        /// <summary>
        /// <para>Redline - Network ID Field</para>
        /// <para>The name of the network ID field from the existing redline feature class that was chosen.</para>
        /// <para>所选现有红线要素类中的网络 ID 字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - Network ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _redline_network_id_field { get; set; } = null;


        /// <summary>
        /// <para>Updated Input Workspace</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Workspace")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_workspace { get; set; }


        /// <summary>
        /// <para>Conflict Prevention</para>
        /// <para><xdoc>
        ///   <para>Specifies whether conflict prevention will be enabled for the input LRS. Conflict prevention is only available when editing or performing geoprocessing on branch versioned data that is published as a feature service.</para>
        ///   <bulletList>
        ///     <bullet_item>As is—The current conflict prevention setting will be used. This is the default.</bullet_item><para/>
        ///     <bullet_item>Enable—Conflict prevention will be enabled for the input LRS.</bullet_item><para/>
        ///     <bullet_item>Disable—Conflict prevention will be disabled for the input LRS.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否为输入 LRS 启用冲突预防。冲突预防仅在对发布为要素服务的分支版本化数据进行编辑或执行地理处理时可用。</para>
        ///   <bulletList>
        ///     <bullet_item>按原样 - 将使用当前的冲突预防设置。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>启用 - 将为输入 LRS 启用冲突预防。</bullet_item><para/>
        ///     <bullet_item>禁用 - 将禁用输入 LRS 的冲突预防。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Conflict Prevention")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _conflict_prevention_value _conflict_prevention { get; set; } = _conflict_prevention_value._AS_IS;

        public enum _conflict_prevention_value
        {
            /// <summary>
            /// <para>As is</para>
            /// <para>As is—The current conflict prevention setting will be used. This is the default.</para>
            /// <para>按原样 - 将使用当前的冲突预防设置。这是默认设置。</para>
            /// </summary>
            [Description("As is")]
            [GPEnumValue("AS_IS")]
            _AS_IS,

            /// <summary>
            /// <para>Enable</para>
            /// <para>Enable—Conflict prevention will be enabled for the input LRS.</para>
            /// <para>启用 - 将为输入 LRS 启用冲突预防。</para>
            /// </summary>
            [Description("Enable")]
            [GPEnumValue("ENABLE")]
            _ENABLE,

            /// <summary>
            /// <para>Disable</para>
            /// <para>Disable—Conflict prevention will be disabled for the input LRS.</para>
            /// <para>禁用 - 将禁用输入 LRS 的冲突预防。</para>
            /// </summary>
            [Description("Disable")]
            [GPEnumValue("DISABLE")]
            _DISABLE,

        }

        public ModifyLRS SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}